Interconnected, intercommunicating computing devices are used to implement cluster computing systems (“computing clusters” or “clusters”) where several discrete computing nodes work together to accomplish a computing task assigned to the cluster as a whole. Some such systems can have all, or a portion of the cluster deployed in the cloud. Cloud computing allows for computing resources to be provided as services rather than a deliverable product. For example, in a cloud-computing environment, computing power, software, information, and/or network connectivity are provided (for example, through a rental agreement) over a network, such as the Internet.
Cluster computing requires performing management functions on each cluster, such as service deployment and monitoring. These are generally performed by cluster management software or logic (an “agent”) running on one or more of the computing nodes or other computing devices of or connected to the cluster. For example, users can submit computing jobs to a cluster as a whole, and the cluster management software will determine which node of the cluster should execute the job. Different jobs have different demands for computing resources such as processor cycles, memory, disk storage, and network bandwidth. Moreover, long-running jobs such as remote-desktop sessions can have resource demands that vary over time while the job is running. Clusters can be evaluated based on adherence to service-level agreements (SLAs) that specify the required job performance a customer requires a cluster to deliver. Various prior schemes sum resource requirements of individual jobs running on a node to estimate whether a new job can be added to that node. However, the total resource utilization of jobs on a node can be greater than the sum of utilization values of the jobs run individually. Running more jobs on a node can increase, e.g., paging, swapping, bus contention, or graphics processing unit (GPU) contention, reducing performance of that node and possibly causing a violation of SLAs.